package com.haixiaoke.saas.repository.service.impl;

import com.haixiaoke.saas.repository.mapper.MetroLineMapper;
import com.haixiaoke.saas.repository.pojo.MetroLine;
import com.haixiaoke.saas.repository.service.IMetroLineService;
import com.haixiaoke.saas.repository.util.Tree.Node;
import com.haixiaoke.saas.repository.util.Tree.Tree;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * 地铁省市-根据id关联地铁号线Service业务层处理
 *
 * @author haixiaoke
 * @date 2023-04-06
 */
@Service
public class MetroLineServiceImpl implements IMetroLineService {
    @Autowired
    private MetroLineMapper metroLineMapper;

    /**
     * 查询地铁省市-根据id关联地铁号线
     *
     * @param metroId 地铁省市-根据id关联地铁号线主键
     * @return 地铁省市-根据id关联地铁号线
     */
    @Override
    public MetroLine selectMetroByMetroId(Long metroId) {
        return metroLineMapper.selectMetroByMetroId(metroId);
    }

    /**
     * 查询地铁省市-根据id关联地铁号线列表
     *
     * @param metro 地铁省市-根据id关联地铁号线
     * @return 地铁省市-根据id关联地铁号线
     */
    @Override
    public List<MetroLine> selectMetroList(MetroLine metro) {
        return metroLineMapper.selectMetroList(metro);
    }

    /**
     * 新增地铁省市-根据id关联地铁号线
     *
     * @param metro 地铁省市-根据id关联地铁号线
     * @return 结果
     */
    @Override
    public int insertMetro(MetroLine metro) {
        metro.setCreateTime(new Date());
        return metroLineMapper.insertMetro(metro);
    }

    /**
     * 修改地铁省市-根据id关联地铁号线
     *
     * @param metro 地铁省市-根据id关联地铁号线
     * @return 结果
     */
    @Override
    public int updateMetro(MetroLine metro) {
        metro.setUpdateTime(new Date());
        return metroLineMapper.updateMetro(metro);
    }

    /**
     * 批量删除地铁省市-根据id关联地铁号线
     *
     * @param metroIds 需要删除的地铁省市-根据id关联地铁号线主键
     * @return 结果
     */
    @Override
    public int deleteMetroByMetroIds(Long[] metroIds) {
        return metroLineMapper.softDeleteMetroByMetroIds(metroIds);
//        return metroLineMapper.deleteMetroByMetroIds(metroIds);
    }

    /**
     * 删除地铁省市-根据id关联地铁号线信息
     *
     * @param metroId 地铁省市-根据id关联地铁号线主键
     * @return 结果
     */
    @Override
    public int deleteMetroByMetroId(Long metroId) {
        return metroLineMapper.deleteMetroByMetroId(metroId);
    }

    /**
     * 校验线路是否已存在
     *
     * @param metroName    地铁名称
     * @param provinceId   省id
     * @param cityId       市id
     * @return
     */
    @Override
    public boolean checkMetroAndCity(String metroName, Long provinceId, Long cityId) {
        return metroLineMapper.checkMetroAndCity(metroName, provinceId, cityId) != 0;
    }

    @Override
    public List<Node> selectLinesByCityId(Long cityId) {
        List<Node> list = metroLineMapper.selectLinesByCityId(cityId);
        Tree tree = new Tree(list);
        return tree.buildTree();
    }
}
